package com.zetyun.tiger.connector.util;

import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.util.Calendar;
import java.util.Date;

public class SpecialDateFormatUtil {


    private static final DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd");
    private static final DateTimeFormatter dtfFull = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

    public static Long getRecordTs(String timeStr) {
        return generateRecordCalendar(timeStr).getTimeInMillis();
    }

    public static Calendar generateRecordCalendar(String timeStr) {
        String year = "20".concat(timeStr.substring(1, 3));
        String days = timeStr.substring(3, 6);
        String hour = timeStr.substring(6, 8);
        String minute = timeStr.substring(8, 10);
        String second = timeStr.substring(10, 12);
        String millSec = timeStr.substring(12, 15);

        return new Calendar.Builder()
                .set(Calendar.YEAR, Integer.parseInt(year))
                .set(Calendar.DAY_OF_YEAR, Integer.parseInt(days))
                .set(Calendar.HOUR_OF_DAY, Integer.parseInt(hour))
                .set(Calendar.MINUTE, Integer.parseInt(minute))
                .set(Calendar.SECOND, Integer.parseInt(second))
                .set(Calendar.MILLISECOND, Integer.parseInt(millSec))
                .build();

    }


    public static Long toTs(String dtStr, boolean isFull) {
        LocalDateTime localDateTime = null;
        if (!isFull) {
            dtStr = dtStr + " 00:00:00";
        }
        localDateTime = LocalDateTime.parse(dtStr, dtfFull);

        return localDateTime.toInstant(ZoneOffset.of("+8")).toEpochMilli();
    }

    public static Long toTs(String dtStr) {
        return toTs(dtStr, false);
    }

    public static String toDate(Long ts) {
        Date dt = new Date(ts);
        LocalDateTime localDateTime = LocalDateTime.ofInstant(dt.toInstant(), ZoneId.systemDefault());
        return dtf.format(localDateTime);
    }

    public static String toYmdHms(Long ts) {
        Date dt = new Date(ts);
        LocalDateTime localDateTime = LocalDateTime.ofInstant(dt.toInstant(), ZoneId.systemDefault());
        return dtfFull.format(localDateTime);
    }
}
